tg-me.com/pro_python_code/1801
Last Update:
# π Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ: ΠΎΠ±Π·ΠΎΡ ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΡ
Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΎΡΠ½ΠΎΠ²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ. ΠΡ ΠΌΠ΅ΡΡΠ΅Π½Π΄ΠΆΠ΅ΡΠΎΠ² ΠΈ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΡ
ΡΠΈΡΡΠ΅ΠΌ Π΄ΠΎ VPN β Π²ΡΡ Π΄Π΅ΡΠΆΠΈΡΡΡ Π½Π° Π½Π°Π΄ΡΠΆΠ½ΡΡ
Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°Ρ
ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
Π‘Π΅Π³ΠΎΠ΄Π½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π΄Π΅ΡΡΡΠΊΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠΎΠ², Π½ΠΎ ΡΡΠ΅Π΄ΠΈ Π½ΠΈΡ
Π²ΡΠ΄Π΅Π»ΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΡ
, ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΡ
ΠΈ ΡΠΈΡΠΎΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ
. ΠΠ°Π²Π°ΠΉΡΠ΅ ΡΠ°Π·Π±Π΅ΡΡΠΌ ΠΈΡ
ΠΏΠΎΠ½ΡΡΠ½ΡΠΌ ΡΠ·ΡΠΊΠΎΠΌ.
---
## 1οΈβ£ AES (Advanced Encryption Standard)
AES β ΡΡΠ°Π½Π΄Π°ΡΡ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ Π±Π»ΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ. ΠΡΠΈΠ½ΡΡ Π² 2001 Π³ΠΎΠ΄Ρ, Π·Π°ΠΌΠ΅Π½ΠΈΠ» DES. ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΊΠ»ΡΡ Π΄Π»Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π΄Π΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ.
- ΠΠ»ΠΎΠΊ Π΄Π°Π½Π½ΡΡ
: 128 Π±ΠΈΡ
- ΠΠ»ΡΡΠΈ: 128, 192 ΠΈΠ»ΠΈ 256 Π±ΠΈΡ
- ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°ΡΠ½Π΄ΠΎΠ²: 10, 12, 14
### π‘ ΠΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ?
- HTTPS
- VPN (OpenVPN, WireGuard)
- ZIP-Π°ΡΡ
ΠΈΠ²Ρ
- WhatsApp, Signal
### π ΠΡΠΈΠΌΠ΅Ρ Π½Π° Python (PyCryptodome):
from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes
from Crypto.Util.Padding import pad, unpad
key = get_random_bytes(16) # 128-Π±ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ
cipher = AES.new(key, AES.MODE_CBC)
data = b"Secret message"
padded = pad(data, AES.block_size)
encrypted = cipher.encrypt(padded)
print("Encrypted:", encrypted)
# ΠΠ»Ρ Π΄Π΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π½ΡΠΆΠ΅Π½ IV
iv = cipher.iv
cipher_dec = AES.new(key, AES.MODE_CBC, iv)
decrypted = unpad(cipher_dec.decrypt(encrypted), AES.block_size)
print("Decrypted:", decrypted.decode())
2οΈβ£ RSA (RivestβShamirβAdleman)
RSA β Π°Π»Π³ΠΎΡΠΈΡΠΌ Ρ Π°ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΡΠΌΠΈ ΠΊΠ»ΡΡΠ°ΠΌΠΈ (Π΅ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΉ ΠΈ Π·Π°ΠΊΡΡΡΡΠΉ ΠΊΠ»ΡΡΠΈ). ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΠΈ ΡΠΈΡΡΠΎΠ²ΡΡ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ.
- Π Π°Π·ΠΌΠ΅Ρ ΠΊΠ»ΡΡΠ΅ΠΉ: ΠΎΡ 1024 Π΄ΠΎ 4096 Π±ΠΈΡ
- ΠΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°ΠΊΡΠΎΡΠΈΠ·Π°ΡΠΈΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠΈΡΠ΅Π»
π‘ ΠΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ?
- TLS/SSL
- PGP/GPG
- ΠΠ»Π΅ΠΊΡΡΠΎΠ½Π½ΡΠ΅ ΠΏΠΎΠ΄ΠΏΠΈΡΠΈ
### π ΠΡΠΈΠΌΠ΅Ρ Π½Π° Python (cryptography):
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives import hashes
# ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠ»ΡΡΠ΅ΠΉ
private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()
message = b"Secret message"
# Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅
ciphertext = public_key.encrypt(
message,
padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
)
print("Encrypted:", ciphertext)
# ΠΠ΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅
plaintext = private_key.decrypt(
ciphertext,
padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()), algorithm=hashes.SHA256(), label=None)
)
print("Decrypted:", plaintext.decode())
3οΈβ£ ChaCha20 (Ρ ΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΡ Π΅ΠΌΠΎΠΉ Poly1305)
ChaCha20-Poly1305 β Π°Π»Π³ΠΎΡΠΈΡΠΌ ΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ. ΠΡΡΡΡΠ΅Π΅ AES Π½Π° ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ ΡΡΡΡΠΎΠΉΡΡΠ²Π°Ρ ΠΈ ΡΡΡΠΎΠΉΡΠΈΠ² ΠΊ Π°ΡΠ°ΠΊΠ°ΠΌ Π½Π° ΠΏΠΎΠ±ΠΎΡΠ½ΡΠ΅ ΠΊΠ°Π½Π°Π»Ρ.
- ΠΠ»ΡΡ: 256 Π±ΠΈΡ
- ΠΠΎΡΠΎΠΊΠΎΠ²ΡΠΉ ΡΠΈΡΡ + Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡ (AEAD)
### π‘ ΠΠ΄Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ?
- TLS 1.3
- Google Chrome
- OpenSSH
### π ΠΡΠΈΠΌΠ΅Ρ Π½Π° Python (cryptography):
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305
import os
key = ChaCha20Poly1305.generate_key()
nonce = os.urandom(12)
chacha = ChaCha20Poly1305(key)
data = b"Secret message"
# Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅
encrypted = chacha.encrypt(nonce, data, None)
print("Encrypted:", encrypted)
# ΠΠ΅ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅
decrypted = chacha.decrypt(nonce, encrypted, None)
print("Decrypted:", decrypted.decode())
## π ΠΠ°ΠΊ Π²ΡΠ±ΡΠ°ΡΡ Π°Π»Π³ΠΎΡΠΈΡΠΌ?
| ΠΠ°Π΄Π°ΡΠ° | ΠΠ»Π³ΠΎΡΠΈΡΠΌ |
|------------------------------|------------------|
| Π¨ΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ² | AES |
| ΠΠ΅Π·ΠΎΠΏΠ°ΡΠ½Π°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° ΠΊΠ»ΡΡΠ° | RSA |
| ΠΡΡΡΡΠΎΠ΅ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠ΅ΡΠΈ | ChaCha20-Poly1305|
| Π¦ΠΈΡΡΠΎΠ²Π°Ρ ΠΏΠΎΠ΄ΠΏΠΈΡΡ | RSA, ECDSA |
βοΈ ΠΡΠ²ΠΎΠ΄
- ΠΠ»Ρ ΡΠΈΠΌΠΌΠ΅ΡΡΠΈΡΠ½ΠΎΠ³ΠΎ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΡ Π»ΡΡΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ AES ΠΈΠ»ΠΈ ChaCha20.
- ΠΠ»Ρ ΠΎΠ±ΠΌΠ΅Π½Π° ΠΊΠ»ΡΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΠ΄ΠΏΠΈΡΠ΅ΠΉ β RSA ΠΈΠ»ΠΈ ΡΠ»Π»ΠΈΠΏΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ (ECDSA, ECDH).
- ΠΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΡΡ ΡΠ΅ΠΆΠΈΠΌΠ°Ρ ΠΈ Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΌΠΈ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ°ΠΌΠΈ ΡΠ΅Π»ΠΎΡΡΠ½ΠΎΡΡΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, GCM, Poly1305).
Π‘ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΡ β ΡΡΠΎ Π½Π΅ ΠΏΡΠΎΡΡΠΎ "ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅", Π° ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡΠ½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° Π·Π°ΡΠΈΡΡ Π΄Π°Π½Π½ΡΡ . ΠΡΠ±ΠΈΡΠ°ΠΉΡΠ΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ ΠΏΠΎΠ΄ Π·Π°Π΄Π°ΡΡ!
πΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅
BY Python RU

Share with your friend now:
tg-me.com/pro_python_code/1801